'use strict';
/***
 * @(1)类型声明
 * **/
//1
function add(type) {
    console.log(type);
}
// add(12);
add('12');
//2
function demo(type) {
    console.log(type);
    // return  type;
}
demo('1');
//3
var a = '1';
var b = 1; // === let b: number = 1;
// b = '12' 报错
var c; // === let c: any;
c = '1';
c = 12;
/***
 * @(2)联合类型声明
 * **/
var d = '1';
d = 2;
function demo1(val) {
    // 必须返回值 值得类型任意
    //参数不确定时 参数只能调用两种类型共有的方法
    //return  val.length //所以报错
    return val.toString();
}
var tom = {
    name: 'Tom',
    age: 25
};
var tom1 = {
    name: 'Tom',
    age: 25
};
var tom3 = {
    name: 'Tom',
    gender: 'male'
};
var tom6 = {
    id: 89757,
    name: 'Tom',
    gender: 'male'
};
// tom.id = 9527; //报错
/***
 * @(4)数组的类型
 * **/
//简单表示法
var fibonacci = [1, 1, 2, 3, 5];
// let fibonacci2: number[] = [1, '1', 2, 3, 5]; //报错 定义一个已number为值得数组 不能有其他类型的值
//数组泛型  待扩展。。。。。。。。。。。。。。。
var fibonacci2 = [1, 1, 2, 3, 5];
var fibonacci3 = [1, 1, 2, 3, 5];
//any 在数组中的应用
var list = ['xcatliu', 25, { website: 'http://xcatliu.com' }];
/***
 * @(4)函数的类型
 * **/
//函数声明
function add1(x, y) {
    return x + y;
}
//函数表达式
var add2 = function (x, y) {
    return x + y; //可以正常编译 但是实际上add2 没有去设定他的类型
};
var add3 = function (x, y) {
    return x + y; //实际上应该这样
};
var mySearch;
mySearch = function (source, subString) {
    return source.search(subString) !== -1;
};
//可选参数
function buildName(firstName, lastName) {
    if (lastName) {
        return firstName + ' ' + lastName;
    }
    else {
        return firstName;
    }
}
var tomcat = buildName('Tom', 'Cat');
var tom2 = buildName('Tom');
//可选参数后面不可再接 必需参数  但是可以接可选参数
// function buildName2(firstName?: string, lastName: string) {  //报错
//     if (lastName) {
//         return firstName + ' ' + lastName;
//     } else {
//         return firstName;
//     }
// }
function buildName2(firstName, lastName) {
    if (lastName) {
        return firstName + ' ' + lastName;
    }
    else {
        return firstName;
    }
}
//参数默认值
//参数默认值有了 那么这个参数就可以有或者没有
function buildName3(firstName, lastName) {
    if (lastName === void 0) { lastName = 'Cat'; }
    return firstName + ' ' + lastName;
}
var tomcat3 = buildName('Tom', 'Cat');
var tom4 = buildName('Tom');
//同时他后面也可接必需参数
function buildName4(firstName, lastName) {
    if (firstName === void 0) { firstName = 'Cat'; }
    return firstName + ' ' + lastName;
}
var tomcat4 = buildName('Tom', 'Cat');
var cat4 = buildName(undefined, 'Cat');
//剩余参数 注意： 剩余参数只能是参数的最后一个
function push(array) {
    var items = [];
    for (var _i = 1; _i < arguments.length; _i++) {
        items[_i - 1] = arguments[_i];
    }
    items.forEach(function (item) {
        array.push(item);
    });
}
var f = [];
push(f, 1, 2, 3);
function reverse(x) {
    if (typeof x === 'number') {
        return Number(x.toString().split('').reverse().join(''));
    }
    else if (typeof x === 'string') {
        return x.split('').reverse().join('');
    }
}
